#ifndef _RTC_FUNC_H_
#define _RTC_FUNC_H_
#include "stm32f4xx.h"
#include "e2prom_func.h"
#include "device_resource.h"
#include "time.h"
#include <stdio.h>
#include <string.h>
// 设备地址定义
#define RTC_CHIP_ADDR_W 0xA2 // 写地址（7位地址左移1位 + 0）
#define RTC_CHIP_ADDR_R 0xA3 // 读地址（7位地址左移1位 + 1）

#define RTC_Chip_SLA 0x51 /* 7-bit I²C 地址 */
#define REG_CTRL1 0x00
#define REG_CTRL2 0x01
#define REG_VL_SEC 0x02 /* bit7=VL */
#define REG_MIN 0x03
#define REG_HOUR 0x04
#define REG_DAY 0x05
#define REG_WEEKDAY 0x06
#define REG_MONTH 0x07
#define REG_YEAR 0x08

typedef struct
{
    uint8_t sec;
    uint8_t min;
    uint8_t hour;
    uint8_t day;
    uint8_t weekday;
    uint8_t month;
    uint8_t year; /* 00-99 */
} rtc_time_t;

static uint8_t BCD2DEC(uint8_t bcd);

// 十进制转BCD码
static uint8_t DEC2BCD(uint8_t dec);
static int rtc_read_raw(uint8_t *buf);
/* 写整个时钟寄存器（7 字节） */
static int rtc_write_raw(uint8_t *buf);

static int rtc_time_is_valid(time_t *t);
/* 把 BCD 寄存器解析成结构体 */
static void raw2time(const uint8_t *raw, struct tm *t);

/* 把结构体打包成 BCD 寄存器 */
static void time2raw(const struct tm *t, uint8_t *raw);
int RTC_Chip_Get_Time(struct tm *t);
int RTC_Chip_Set_Time(const struct tm *t);
int get_compile_time(time_t *tickets);
int RTC_Chip_init(void);
int rtc_chip_one_min_timer_test(void);
int RTC_Chip_init_1hour_timer_int(void);
int RTC_Chip_Timer_int_handler(void);
void PC7_Exti_Init(void);

#endif
